<!DOCTYPE html
  PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- saved from url=(0014)about:internet -->
<html xmlns:MSHelp="http://www.microsoft.com/MSHelp/" lang="en-us" xml:lang="en-us"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<meta name="DC.Type" content="topic">
<meta name="DC.Title" content="Using Circular Buffers">
<meta name="DC.subject" content="Using Circular Buffers">
<meta name="keywords" content="Using Circular Buffers">
<meta name="DC.Relation" scheme="URI" content="../tbb_userguide/Working_on_the_Assembly_Line_pipeline.htm">
<meta name="DC.Format" content="XHTML">
<meta name="DC.Identifier" content="tutorial_Using_Circular_Buffers">
<link rel="stylesheet" type="text/css" href="../intel_css_styles.css">
<title>Using Circular Buffers</title>
<xml>
<MSHelp:Attr Name="DocSet" Value="Intel"></MSHelp:Attr>
<MSHelp:Attr Name="Locale" Value="kbEnglish"></MSHelp:Attr>
<MSHelp:Attr Name="TopicType" Value="kbReference"></MSHelp:Attr>
</xml>
</head>
<body id="tutorial_Using_Circular_Buffers">
 <!-- ==============(Start:NavScript)================= -->
 <script src="..\NavScript.js" language="JavaScript1.2" type="text/javascript"></script>
 <script language="JavaScript1.2" type="text/javascript">WriteNavLink(1);</script>
 <!-- ==============(End:NavScript)================= -->
<a name="tutorial_Using_Circular_Buffers"><!-- --></a>

 
  <h1 class="topictitle1">Using Circular Buffers</h1>
 
  
  <div>
	 <p>Circular buffers can sometimes be used to minimize the overhead of
		allocating and freeing the items passed between pipeline filters. If the first
		filter to create an item and last filter to consume an item are both 
		<samp class="codeph">serial_in_order</samp>, the items can be allocated and freed
		via a circular buffer of size at least 
		<samp class="codeph">ntoken</samp>, where 
		<samp class="codeph">ntoken</samp> is the first parameter to 
		<samp class="codeph">parallel_pipeline</samp>. Under these conditions, no checking
		of whether an item is still in use is necessary. 
	 </p>

	 <p>The reason this works is that at most 
		<samp class="codeph">ntoken</samp> items can be in flight, and items will be freed
		in the order that they were allocated. Hence by the time the circular buffer
		wraps around to reallocate an item, the item must have been freed from its
		previous use in the pipeline. If the first and last filter are 
		<em>not</em> 
		<samp class="codeph">serial_in_order</samp>, then you have to keep track of which
		buffers are currently in use, because buffers might not be retired in the same
		order they were allocated.
	 </p>

  </div>


<div class="familylinks">
<div class="parentlink"><strong>Parent topic:</strong>&nbsp;<a href="../tbb_userguide/Working_on_the_Assembly_Line_pipeline.htm">Working on the Assembly Line: pipeline</a></div>
</div>
<div></div>

</body>
</html>
